package com.cskaoyan.bean;

import com.cskaoyan.bean.po.admin.role.MarketPermissionDetails;
import com.cskaoyan.bean.po.admin.role.MarketRolePermission;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Objects;

/**
 * @author MoJunXiang
 * @since 2022/09/09 21:47
 */
@NoArgsConstructor
public class MarketRolePermissionConditions extends MarketRolePermission {
    public void init(MarketRolePermission po) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {

        Class<? extends MarketRolePermission> rolePermissionClazz = po.getClass();
        Class<? extends MarketRolePermissionConditions> columnsClazz = this.getClass();
        Method[] cMethods = columnsClazz.getMethods();
        Field[] pFields = rolePermissionClazz.getDeclaredFields();

        for (Field pField : pFields) {
            String fieldName = pField.getName();

            String methodFieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
            Class<?> pFieldType = pField.getType();
            // 拿到当前 Colimns对象 给 pField成员 赋值的 set方法
            Method cSetMethod = columnsClazz.getMethod("set" + methodFieldName, pFieldType);

            // 从 MarketPermissionDetails对象po 里取出 pField成员 的值
            pField.setAccessible(true);
            Object value = pField.get(po);
            /*如果 value 不是 String类型 ，那么它就是 Integer类型 ，因为只有
             * 这两种类型的成员变量*/
            if (pFieldType != String.class) {
                if (value != null) {
                    cSetMethod.invoke(this, value);
                }
            } else {
                /*此时 value 为 String 类型。如果 value 不为空而且 value 不为 ""
                 * 则*/
                if (value != null && !Objects.equals(value, "")) {
                    cSetMethod.invoke(this,value);
                }
            }
        }

    }
}
